package com.example.practica_tresenraya;

import java.util.ArrayList;
import java.util.Random;

import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
/**
 * Clase contenedora de mis metodos necesarios para controlar controlar los eventos.
 * @author Francisco
 *
 */
public class Modelo {
	/**
	 * Metodo para determinar que boton se ha pulsado y como debe ejecutar la
	 * interfaz Grafica
	 * 
	 * @param botones
	 *            Arraylist con los botones del tablero de juegos.
	 * 
	 * @param boton
	 *            Boton pulsado por el usuario
	 * @return deVuelve 1 si el boton esta habilitado, devuelve 2 si el boton
	 *         precionado es el "start" del juego, -1 si el juego no tiene mas
	 *         botones disponibles en el tablero de juego y 3 en caso de
	 *         cualquier error.
	 */
	public int jugar(Button boton, ArrayList botones) {
		String codigo = (String) boton.getText();
		if (codigo.equalsIgnoreCase("GO!")
				|| codigo.equalsIgnoreCase("Try Again")) {
			return 2;
		} else if (codigo.equalsIgnoreCase(" ")) {
			return 1;
		} else {
			if (this.isTerminado(botones))
				return -1;
			else
				return 3;
		}
	}

	/**
	 * Metodo para saber si el juego aun continua
	 * 
	 * @param array
	 *            array con los botones de la pantalla de juego
	 * @return devuelve verdadero si el juego ah terminado y falso si aun hay
	 *         casilleros vacios
	 */
	public boolean isTerminado(ArrayList array) {
		String x = "";
		int cont = 0;
		for (int i = 0; i < array.size(); i++) {
			Button aux = (Button) array.get(i);
			x = "" + aux.getText();
			if (aux.isEnabled())
				cont++;

		}
		if (cont != 0) {
			for (int i = 0; i < array.size(); i++) {
				Button aux = (Button) array.get(i);
				x = "" + aux.getText();
				if (x.equalsIgnoreCase(" "))
					return false;
			}
		}
		return true;
	}
/**
 * 
 * @param array Arraylist con los botones del tablero de juego
 * @param j Caracter del jugador que ha presionado el boton ( X jugador uno , O Jugador2/Maquina)
 * @param i numero entero que indica si el jugador es humano o la maquina
 * @return devuelve "Ganador jugador X" en el caso de encontrar un jugador/Maquina ganador 
 */
	public String comprobarGanador(ArrayList array, String j, int i) {
		// Saco los botones del array para hacerlo mas legible y extraigo su
		// texto en Strings auxiliares
		Button bt1 = (Button) array.get(0);
		String aux1 = "" + bt1.getText();
		Button bt2 = (Button) array.get(1);
		String aux2 = "" + bt2.getText();
		Button bt3 = (Button) array.get(2);
		String aux3 = "" + bt3.getText();
		Button bt4 = (Button) array.get(3);
		String aux4 = "" + bt4.getText();
		Button bt5 = (Button) array.get(4);
		String aux5 = "" + bt5.getText();
		Button bt6 = (Button) array.get(5);
		String aux6 = "" + bt6.getText();
		Button bt7 = (Button) array.get(6);
		String aux7 = "" + bt7.getText();
		Button bt8 = (Button) array.get(7);
		String aux8 = "" + bt8.getText();
		Button bt9 = (Button) array.get(8);
		String aux9 = "" + bt9.getText();
		String x = null;
		// Compruebo verticalmente
		if (aux1.equalsIgnoreCase(j) && aux2.equalsIgnoreCase(j)
				&& aux3.equalsIgnoreCase(j)) {
			if (j.equalsIgnoreCase("X"))
				x = "Ganador el jugador 1";
			else if (i == 0)
				x = "Ganador el jugador 2";
			else
				x = "Ganadora la maquina";
		} else if (aux4.equalsIgnoreCase(j) && aux5.equalsIgnoreCase(j)
				&& aux6.equalsIgnoreCase(j)) {
			if (j.equalsIgnoreCase("X"))
				x = "Ganador el jugador 1";
			else if (i == 0)
				x = "Ganador el jugador 2";
			else
				x = "Ganadora la maquina";
		} else if (aux7.equalsIgnoreCase(j) && aux8.equalsIgnoreCase(j)
				&& aux9.equalsIgnoreCase(j)) {
			if (j.equalsIgnoreCase("X"))
				x = "Ganador el jugador 1";
			else if (i == 0)
				x = "Ganador el jugador 2";
			else
				x = "Ganadora la maquina";
		}
		// Compruebo horizontalmente
		else if (aux1.equalsIgnoreCase(j) && aux4.equalsIgnoreCase(j)
				&& aux7.equalsIgnoreCase(j)) {
			if (j.equalsIgnoreCase("X"))
				x = "Ganador el jugador 1";
			else if (i == 0)
				x = "Ganador el jugador 2";
			else
				x = "Ganadora la maquina";
		} else if (aux2.equalsIgnoreCase(j) && aux5.equalsIgnoreCase(j)
				&& aux8.equalsIgnoreCase(j)) {
			if (j.equalsIgnoreCase("X"))
				x = "Ganador el jugador 1";
			else if (i == 0)
				x = "Ganador el jugador 2";
			else
				x = "Ganadora la maquina";
		} else if (aux3.equalsIgnoreCase(j) && aux6.equalsIgnoreCase(j)
				&& aux9.equalsIgnoreCase(j)) {
			if (j.equalsIgnoreCase("X"))
				x = "Ganador el jugador 1";
			else if (i == 0)
				x = "Ganador el jugador 2";
			else
				x = "Ganadora la maquina";
		}
		// Compruebo las dos diagonales
		else if (aux1.equalsIgnoreCase(j) && aux5.equalsIgnoreCase(j)
				&& aux9.equalsIgnoreCase(j)) {
			if (j.equalsIgnoreCase("X"))
				x = "Ganador el jugador 1";
			else if (i == 0)
				x = "Ganador el jugador 2";
			else
				x = "Ganadora la maquina";
		} else if (aux3.equalsIgnoreCase(j) && aux5.equalsIgnoreCase(j)
				&& aux7.equalsIgnoreCase(j)) {
			if (j.equalsIgnoreCase("X"))
				x = "Ganador el jugador 1";
			else if (i == 0)
				x = "Ganador el jugador 2";
			else
				x = "Ganadora la maquina";
		} else {
			x = "Empateeee";
		}
		return x;
	}
	/**
	 * Metodo para ejercutar el turno de la maquina
	 * @param array ArrayList con los botones del trablero de juego
	 */

	public void turnoMaquina(ArrayList array) {

		Random rm = new Random();
		boolean seguir = true;
		while (seguir) {
			Button aux = (Button) array.get(rm.nextInt(8));
			String x = "" + aux.getText();
			if (x.equalsIgnoreCase(" ")) {
				aux.setText("O");
				aux.setEnabled(false);
				seguir = false;
			}
		}
	}
/**
 * Metodo para establecer el metodo de juego (JUGADOR VS JUGADOR , JUGADOR VS MAQUINA )
 * @param array Arraylist con los botones de inicio
 * @return devuelve 1 en el caso de que el primer boton este pulsado ( JUGADOR VS JUGADOR ).
 * 2 en el caso de que el segundo boton este pulsado (JUGADOR VS MAQUINA).
 * 0 en el caso de que no hay ningun boton de opciones pulsados.
 */
	public int establecerMetodoDeJuego(ArrayList array) {
		RadioButton r1 = (RadioButton) array.get(2);
		RadioButton r2 = (RadioButton) array.get(3);

		if (r1.isChecked()) {
			return 1;
		} else if (r2.isChecked()) {
			return 2;
		} else {
			return 0;
		}
	}
}
